import type { Point } from '@/types';

/**
 * 将实际坐标（米）转换为绘制坐标（像素）
 * @param scale 缩放比例（像素/米）
 * @param origin 原点在绘制坐标系中的位置
 * @param realPoint 实际坐标点
 * @returns 绘制坐标点
 */
export function real2Draw(scale: number, origin: Point, realPoint: Point): Point {
    return {
        x: realPoint.x * scale + origin.x,
        y: -realPoint.y * scale + origin.y // Y轴翻转，因为Canvas的Y轴向下
    };
}

/**
 * 将绘制坐标（像素）转换为实际坐标（米）
 * @param scale 缩放比例（像素/米）
 * @param origin 原点在绘制坐标系中的位置
 * @param drawPoint 绘制坐标点
 * @returns 实际坐标点
 */
export function draw2Real(scale: number, origin: Point, drawPoint: Point): Point {
    return {
        x: (drawPoint.x - origin.x) / scale,
        y: -(drawPoint.y - origin.y) / scale // Y轴翻转
    };
}

/**
 * 计算两点之间的距离
 * @param p1 点1
 * @param p2 点2
 * @returns 距离
 */
export function distance(p1: Point, p2: Point): number {
    const dx = p2.x - p1.x;
    const dy = p2.y - p1.y;
    return Math.sqrt(dx * dx + dy * dy);
}

/**
 * 计算两点之间的角度（弧度）
 * @param p1 点1
 * @param p2 点2
 * @returns 角度（弧度）
 */
export function angle(p1: Point, p2: Point): number {
    return Math.atan2(p2.y - p1.y, p2.x - p1.x);
}

/**
 * 将弧度转换为角度
 * @param radians 弧度
 * @returns 角度
 */
export function radiansToDegrees(radians: number): number {
    return radians * (180 / Math.PI);
}

/**
 * 将角度转换为弧度
 * @param degrees 角度
 * @returns 弧度
 */
export function degreesToRadians(degrees: number): number {
    if(degrees < 0){
        degrees = degrees + 360
    }
    if(degrees >= 360){
        degrees = degrees%360
    }
    return degrees * (Math.PI / 180);
}
